package com.example.bank.util;

import com.example.bank.domain.Result;
import com.example.bank.enums.ResultEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author ：Leeziqiang
 * @description：Result工具类
 * @date ：2021/11/12 14:37
 */
public class ResultUtil {

    private static final Logger logger = LoggerFactory.getLogger(ResultUtil.class);

    /**
     * @descriotin 某项操作成功时调用，用来生成一个Result对象
     *
     * @author Leeziqiang
     * @date 2021/11/12 14:52
     * @param code 自定义的result码
     * @param msg 自定义的result信息
     * @param data result数据对象
     * @return Result
     */
    public static <T> Result success(Integer code, String msg, T data) {
        // new一个Result对象
        Result<T> result = new Result<>();
        // 给属性赋值
        result.setCode(code);
        result.setMsg(msg);
        result.setData(data);
        // 返回Result对象
        return result;
    }

    /**
     * @descriotin 某项操作成功时调用，用来生成一个Result对象
     *
     * @author Leeziqiang
     * @date 2021/11/12 15:00
     * @param msg 自定义Result信息
     * @param data Result数据对象
     * @return Result
     */
    public static <T> Result success(String msg, T data) {
        Result<T> result = new Result<>();
        // code采用ResultEnum类中定义好的
        result.setCode(ResultEnum.SUCCESS.getCode());
        result.setMsg(msg);
        result.setData(data);
        return result;
    }

    /**
     * @descriotin 某项操作成功时调用，用来生成一个Result对象
     *
     * @author Leeziqiang
     * @date 2021/11/12 15:05
     * @param data
     * @return Result
     */
    public static <T> Result success(T data) {
        Result<T> result = new Result<>();
        result.setCode(ResultEnum.SUCCESS.getCode());
        result.setMsg(ResultEnum.SUCCESS.getMsg());
        result.setData(data);
        return result;
    }
    public static <T> Result success(String msg) {
        Result<T> result = new Result<>();
        result.setCode(ResultEnum.SUCCESS.getCode());
        result.setMsg(msg);
        result.setData(null);
        return result;
    }
    public static Map<String, Object> sign(String token, Integer role) {
        Map<String, Object> result = new LinkedHashMap<>();
        result.put("code", ResultEnum.SUCCESS.getCode());
        result.put("msg",ResultEnum.SUCCESS.getMsg());
        result.put("token", token);
        result.put("role", role);
        return result;
    }

    /**
     * @descriotin 某项操作失败时调用，用来生成一个Result对象
     *
     * @author Leeziqiang
     * @date 2021/11/12 15:11
     * @param code 自定义Result码
     * @param msg 自定义Result信息
     * @return Result
     */
    public static <T> Result error(Integer code, String msg) {
        // new一个Result对象
        Result<T> result = new Result<>();
        // 给属性赋值
        result.setCode(code);
        result.setMsg(msg);
        // 操作失败， 所以数据对象是null
        result.setData(null);
        return result;
    }

    /**
     * @descriotin 某项操作失败时调用，用来生成一个Result对象
     *
     * @author Leeziqiang
     * @date 2021/11/12 15:08
     * @param msg 自定义Result信息
     * @return Result
     */
    public static <T> Result error(String msg) {
        Result<T> result = new Result<>();
        // 采用ResultEnum中定义好的ERROR码
        result.setCode(ResultEnum.ERROR.getCode());
        result.setMsg(msg);
        result.setData(null);
        return result;
    }
}
